welcom

# Содержание

## Введение — 9

## Глава 1. Процессорное ядро ARM7 — 11

1.1. Основные положения — 11 1.2. Конвейер — 11 1.3. Регистры — 12 1.4. Регистр текущего состояния программы — 14 1.5. Режимы обработки исключительных ситуаций — 16 1.6. Набор команд ARM7 — 18 1.6.1. Команды ветвления — 21 1.6.2. Команды обработки данных — 22 1.7. Команда обмена — 24 1.8. Изменение регистров состояния — 25 1.9. Программное прерывание — 25 1.10. Модуль MAC — 26 1.11. Набор команд THUMB — 27 1.12. Резюме — 29

## Глава 2. Разработка программного обеспечения — 30

2.1. Основные положения — 30 2.1.1. Загрузка и установка пакета программ компании Keil — 30 2.1.2. ИСР µVISION — 31 2.1.3. ИСР HiTOP — 33 2.1.4. Учебные примеры — 34 2.2. Стартовый код — 35 2.2.1. Определение карты памяти проекта — 38 2.2.2. Определение карты памяти для компилятора GCC — 38 2.3. Взаимодействие кодов ARM и THUMB — 41 2.3.1. Обеспечение взаимодействия в компиляторе GCC — 43 2.4. Библиотека STDIO — 44 2.4.1. Библиотека STDIO и компилятор GCC — 45 2.5. Организация доступа к периферийным устройствам — 45 2.5.1. Организация доступа к периферийным устройствам в компиляторе GCC — 46 2.6. Процедуры обработки прерываний — 46 2.6.1. Обработка прерываний в компиляторе GCC — 47 2.6.2. Отладка обработчиков системных ошибок — 47 2.6.3. Программное прерывание — 48 2.6.4. Программное прерывание и компилятор GCC — 50 2.6.5. Размещение переменных по абсолютным адресам — 51 2.6.6. Размещение кода в ОЗУ — 51 2.6.7. Загрузка кода и данных в ОЗУ при использовании компилятора GCC — 52 2.7. Встраиваемые функции — 55 2.7.1. Встраиваемые функции в компиляторе GCC — 55 2.8. Встроенный ассемблер — 56 2.8.1. Встроенный ассемблер компилятора GCC — 56 2.8.2. Импортирование программ для компилятора GCC — 56 2.9. Аппаратные средства отладки — 57 2.9.1. Важное замечание! — 58 2.9.2. Еще более важное замечание! — 58 2.10. Резюме — 59

## Глава 3. Системные периферийные устройства — 60

3.1. Основные положения — 60 3.2. Внутренние шины — 60 3.3. Организация памяти — 62 3.4. Программирование регистров — 63 3.5. Модуль ускорения работы памяти — 63 3.5.1. Пример конфигурирования модуля MAM — 67 3.6. Программирование FLASH-памяти — 68 3.6.1. Управление картой распределения памяти — 69 3.6.2. Загрузчик — 69 3.6.3. Внутрисхемное программирование (ISP) — 71 3.6.4. Внутрипрограммное программирование (IAP) — 72 3.6.5. Защита FLASH-памяти — 73 3.6.6. Системные тактовые сигналы — 73 3.6.7. Схема ФАПЧ — 76 3.6.8. Тактовые сигналы периферийных устройств — 78 3.7. Управление электропитанием — 78 3.7.1. Групы потребителей — 78 3.7.2. Режимы пониженного энергопотребления — 79 3.8. Система прерываний LPC2300 — 81 3.8.1. Блок управления выводами — 82 3.8.2. Выводы внешних прерываний — 82 3.8.3. Структура прерываний — 83 3.8.4. Прерывание FIQ — 84 3.8.5. Выход из прерывания FIQ — 84 3.8.6. Векторные прерывания IRQ — 86 3.8.7. Выход из прерывания IRQ — 88 3.8.8. Пример: прерывание IRQ — 88 3.8.9. Программное прерывание — 89 3.8.10. Вложенные прерывания — 90 3.9. Контроллер DMA — 91 3.9.1. Обзор модуля DMA — 91 3.9.2. Синхронизация DMA — 93 3.9.3. Пересылка из памяти в память — 93 3.9.4. Пакетная передача — 94 3.9.5. Поддержка модулем DMA периферийных устройств — 94 3.9.6. Пересылка несмежных данных — 95 3.10. Резюме — 95

## Глава 4. Периферийные устройства общего назначения — 96

4.1. Основные положения — 96 4.2. Порты ввода/вывода общего назначения — 96 4.2.1. Быстрые регистры ввода/вывода — 96 4.2.2. Прерывание от GPIO — 99 4.3. Таймеры общего назначения — 100 4.3.1. Режим захвата — 100 4.3.2. Режим счетчика — 103 4.3.3. Режим совпадения — 103 4.4. Модуль ШИМ — 106 4.4.1. Режим счетчика — 110 4.5. Часы реального времени — 110 4.5.1. Опорный сигнал модуля RTC — 111 4.6. Сторожевой таймер — 114 4.6.1. Период сторожевого таймера — 114 4.7. Универсальный асинхронный приемопередатчик — 115 4.7.1. Настройка скорости обмена — 116 4.7.2. Автоопределение скорости обмена — 118 4.7.3. Передача данных — 118 4.7.4. Организация обмена по протоколу IrDA — 121 4.8. Интерфейс I2C — 122 4.9. Интерфейс SPI — 127 4.10. Аналого-цифровой преобразователь — 130 4.11. Цифро-аналоговый преобразователь — 133 4.12. Синхронный последовательный порт — 134 4.12.1. Контроллер I2S — 137 4.13. Интерфейс карт FLASH-памяти — 139 4.13.1. Модуль MCI микроконтроллеров семейства LPC2300 — 146

## Глава 5. Развитые периферийные устройства — 150

5.1. Ethernet MAC — 150 5.2. Протокол TCP/IP — 150 5.2.1. Сетевая модель — 151 5.2.2. Ethernet и IEEE 802.3 — 151 5.2.3. Дейтаграммы TCP/IP — 153 5.2.4. Модуль Ethernet MAC — 157 5.2.5. Стек uIP — 169 5.2.6. Создание веб-сервера с использованием коммерческого стека TCP/IP — 173 5.3. Полноскоростной интерфейс USB 2.0 — 182 5.3.1. Введение в USB — 182 5.3.2. Модуль контроллера USB — 196 5.3.3. Заключение — 208 5.4. Контроллер интерфейса CAN — 208 5.4.1. Семиуровневая модель ISO — 209 5.4.2. Структура узла сети CAN — 210 5.4.3. Объекты сообщений CAN — 211 5.4.4. Арбитраж на шине CAN — 213 5.4.5. Тактовая синхронизация — 214 5.4.6. Передача сообщений CAN — 216 5.4.7. Ограничение распространения ошибок — 218 5.4.8. Прием сообщений CAN — 222 5.4.9. Фильтрация сообщений — 223

## Глава 6. Использование ОС компании Keil — 229

6.1. Возможности ОСРВ — 229 6.2. Настройка проекта — 230 6.3. Задачи — 232 6.4. Запуск ОСРВ — 234 6.5. Создание процессов — 235 6.6. Управление процессами — 236 6.7. Множество экземпляров — 236 6.8. Управление временем — 236 6.8.1. Формирование задержки — 236 6.8.2. Периодический запуск процесса — 237 6.8.3. Виртуальный таймер — 237 6.8.4. Демон ожидания — 237 6.9. Межпроцессное взаимодействие — 238 6.9.1. События — 238 6.9.2. Обработка прерываний в ОСРВ — 239 6.9.3. Семафоры — 241 6.9.4. Предостережение по поводу семафоров — 242 6.9.5. Мьютексы — 242 6.9.6. Предостережение по поводу мьютексов — 243 6.9.7. Буферы сообщений — 243 6.10. Конфигурация — 246

## Глава 7. Использование ОС FreeRTOS — 247

7.1. Портирование ОС FreeRTOS на LPC2300 — 247 7.1.1. Тики таймера — 248 7.1.2. Процедура обработки прерывания от таймера — 249 7.1.3. Переключение контекста — 250 7.1.4. Инициализация стека — 251 7.1.5. Управление памятью — 252 7.2. Конфигурация FreeRTOS — 253 7.2.1. Запуск FreeRTOS — 254 7.2.2. Процессы — 255 7.2.3. Управление процессами — 255 7.2.4. Ловушка на тики — 258 7.2.5. Семафоры — 259 7.2.6. Управление ядром — 262

## Глава 8. Учебное пособие — 263

Введение — 263 Упражнение 1. Знакомство с ИСР Keil — 263 Установка аппаратных средств — 263 Отладчик Keil — 264 Редактирование проекта — 273 Управление процессом выполнения программы — 276 Просмотр данных — 279 Упражнение 2. Стартовый код — 284 Упражнение 3. Совместное использование команд ARM и THUMB — 287 Упражнение 4. Программное прерывание — 292 Упражнение 5. Модуль MAM — 292 Упражнение 6. Использование загрузчика от NXP — 293 Упражнение 7. Схема ФАПЧ — 297 Упражнение 8. Конфигурирование системы тактирования — 299 Упражнение 9. Быстрое прерывание — 300 Упражнение 10. Векторное прерывание — 304 Упражнение 11. Пересылка данных из памяти в память при помощи DMA — 306 Упражнение 12. Пересылка несмежных данных при помощи DMA — 308 Упражнение 13. Порты ввода/вывода общего назначения — 309 Упражнение 14. Прерывание от порта GPIO — 311 Упражнение 15. Функция захвата (capture) — 313 Упражнение 16. Функция совпадения (match) — 313 Упражнение 17. ШИМ — 315 Упражнение 18. Часы реального времени — 316 Упражнение 19. UART — 317 Упражнение 20. Аналого-цифровой преобразователь — 317 Упражнение 21. Цифро-аналоговый преобразователь — 318 Упражнение 22. Драйвер Ethernet — 319 Упражнение 23. TCP/IP стек uIP — 322 Упражнение 24. Передача по интерфейсу CAN — 323 Упражнение 25. Прием по интерфейсу CAN — 325 Упражнение 26. Прием в режиме FullCAN — 327 Упражнение 27. Запуск двух процессов в ОСРВ — 329 Упражнение 28. Управление временем — 329 Упражнение 29. Приостановка и запуск процесса — 330 Упражнение 30. Возобновление процесса из обработчика прерывания — 331 Упражнение 31. Процесс Idle — 332 Упражнение 32. Семафор — 333 Упражнение 33. Очередь сообщений — 334

## Приложения — 335

Список литературы — 335 Полезные ссылки — 335 Оценочные платы и модули — 335